module.exports = {
    // 测试环境
    testEnvironment: 'node',

    // 测试文件匹配模式
    testMatch: [
        '**/__tests__/**/*.ts',
        '**/?(*.)+(spec|test).ts'
    ],

    // 文件扩展名
    moduleFileExtensions: ['ts', 'js', 'json'],

    // 转换器
    transform: {
        '^.+\\.ts$': 'ts-jest',
    },

    // 模块名称映射
    moduleNameMapping: {
        '^src/(.*)$': '<rootDir>/src/$1',
    },

    // 收集覆盖率
    collectCoverage: true,
    collectCoverageFrom: [
        'src/**/*.ts',
        '!src/**/*.d.ts',
        '!src/main.ts',
        '!src/**/index.ts',
    ],

    // 覆盖率报告目录
    coverageDirectory: 'coverage',

    // 覆盖率报告格式
    coverageReporters: [
        'text',
        'lcov',
        'html',
        'json',
    ],

    // 覆盖率阈值
    coverageThreshold: {
        global: {
            branches: 80,
            functions: 80,
            lines: 80,
            statements: 80,
        },
    },

    // 测试超时时间
    testTimeout: 10000,

    // 详细输出
    verbose: true,

    // 显示测试结果
    // showConsole: true,

    // 测试运行器
    runner: 'jest-runner',

    // 设置文件
    setupFilesAfterEnv: ['<rootDir>/test/setup.ts'],

    // 全局变量
    // globals: {
    //   'ts-jest': {
    //     tsconfig: 'tsconfig.json',
    //   },
    // },

    // 模块路径
    roots: ['<rootDir>/src', '<rootDir>/test'],

    // 测试环境变量
    testEnvironmentOptions: {
        NODE_ENV: 'test',
    },

    // 忽略的文件
    testPathIgnorePatterns: [
        '/node_modules/',
        '/dist/',
        '/coverage/',
    ],

    // 模块路径忽略
    modulePathIgnorePatterns: [
        '/dist/',
        '/coverage/',
    ],

    // 清除模拟
    clearMocks: true,

    // 恢复模拟
    restoreMocks: true,

    // 重置模拟
    resetMocks: true,
}; 